/**  
 * 
 * @Title:  NettyEncode.java   
 * @Package com.org.framework.net.code   
 * @Description:    TODO(用一句话描述该文件做什么)   
 * @author: 123774135@qq.com     
 * @date:   2018年7月5日 下午3:10:27   
 * @version V1.0 
 * @Copyright: 2018 www.tydic.com Inc. All rights reserved. 
 * 
 */  
package com.bicon.base.data.common.net.code;

import com.bicon.base.data.common.Constants;
import com.bicon.base.data.common.exception.BusinessException;
import com.bicon.base.data.common.net.serialize.SerializeFactory;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;

/**   
 * @ClassName:  NettyEncode   
 * @Description:netty自定义编码器   
 * @author: 123774135@qq.com 
 * @date:   2018年7月5日 下午3:10:27        
 * @Copyright: 2018 
 * 
 */
public class NettyEncode extends MessageToByteEncoder<Object>{

	private SerializeFactory serializeFactory;
	
	public NettyEncode(SerializeFactory serializeFactory) {
		this.serializeFactory = serializeFactory;
	}
	
	@Override
	protected void encode(ChannelHandlerContext arg0, Object arg1, ByteBuf arg2) throws Exception {
		//将Object 对象转换为byte数组，在这里可以采用第三方的序列化工具或者采用java原生的序列化工具
	   byte[] b =	serializeFactory.serialize(arg1);
	   if(null == b) {
		   //抛出异常
		   throw new BusinessException(Constants.ERROR_STATE, "序列化时，对象为空!");
	   }
	   arg2.writeInt(b.length);//加入消息长度
	   arg2.writeBytes(b);//写入消息体部分
	}

}
